#pragma once;

#include "config.hpp"
#include <string>

namespace dexgel
{
	class Rendrer; // fwd decl2

	namespace priv
	{

		class NonCopyable
		{
		public:
			NonCopyable()
			{
			}
		private:

			NonCopyable(const NonCopyable &copy_from_me)
			{
			}
		};

		class WindowImpl : NonCopyable
		{
		public :

			static WindowImpl* WindowImpl::New(int xres, int yres, const std::string& Title );

			virtual ~WindowImpl()
			{
				// Nothing to do
			}

			virtual void UpdateMessages() = 0;

			virtual bool IsOpened() = 0;
			
			virtual Rendrer* getRendrer() = 0;

			int getMouseX(){ return mousx; }
			int getMouseY(){ return mousy; }
			bool mouseDown(){ return mouseLeft; }
			virtual double getTime() = 0;

			bool keydown[256];
			bool canRender;
		protected:
			int mousx, mousy;
			bool mouseLeft;

		};


	}
}